package br.edu.ufam.controleAcesso

class MenuController {
    
    def index = { redirect(action:list,params:params) }

    // the delete, save and update actions only accept POST requests
    def static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def list = {
       
    }

    def show = {
        def menu = Menu.get( params.id )

        if(!menu) {
            flash.message = "Registro não encontrado!"
            redirect(action:list)
        }
        else { return [ menu : menu ] }
    }

    def delete = {
        def menu = Menu.get( params.id )
        if (menu){
            def menuAplic = Menu.executeQuery("select count(distinct a) from Aplicacao a where a.menu.id = ?",[menu.id])
	        if (menuAplic[0] == 0){
	            Menu.withTransaction{status ->
                    try{
                        menu.delete(flush:true)
                        flash.message = "Operação realizada com sucesso!"
                    }catch(e){
                        flash.errors = "Operação não realizada! - " + e.toString()
                    }
                    redirect(action:list)                    
                }
	        }else{
	  	        flash.errors = "Operação não realizada! - " + "O menu possui aplicações."
		        redirect(action:list)
	        }
        }else {
            flash.message = "Registro não encontrado!"
            redirect(action:list)
        }
    }

    def edit = {
        def menu = Menu.get( params.id )

        if(!menu) {
            flash.message = "Registro não encontrado!"
            redirect(action:list)
        }
        else {
            return [ menu : menu ]
        }
    }

    def update = {
        def menu = Menu.get( params.id )
        if(menu) {
            menu.properties = params
            menu.usuarioUpdated = Usuario.get(session.usuario)
            if(!menu.hasErrors() && menu.save(flush:true)) {
                flash.message = "Operação realizada com sucesso!"
                redirect(action:show,id:menu.id)
            }
            else {
                render(view:'edit',model:[menu:menu])
            }
        }
        else {
            flash.message = "Registro não encontrado!"
            redirect(action:edit,id:params.id)
        }
    }

    def create = {
        def menu = new Menu()
        menu.properties = params
        return ['menu':menu]
    }

    def save = {
        def menu = new Menu(params)
        menu.usuarioCreated = Usuario.get(session.usuario)
        menu.usuarioUpdated = Usuario.get(session.usuario)
        if(!menu.hasErrors() && menu.save(flush:true)) {
            flash.message = "Operação realizada com sucesso!"
            redirect(action:show,id:menu.id)
        }
        else {
            render(view:'create',model:[menu:menu])
        }
    }

    def dosearch = {
        if (!params.max) {
            params.max = 10
            params.offset = 0
        }
        def menus = Menu.findAll("from Menu where upper(descricao) like upper(?) order by descricao", ["%"+params.descricao+"%"], [max:params.max, offset:params.offset])
        int qtd = Menu.countByDescricaoIlike("%${params.descricao}%")
        return [menus: menus, qtd: qtd]
    }
}
